package com.zy.service;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;

import com.zy.entity.Plane;
import com.zy.util.Dom4jResolutionXml;
import com.zy.util.Dom4jWriteXml;

public class PlaneServiceImpl implements PlaneService {
	Scanner scan = new Scanner(System.in);
	@Override
	public void getAllPlane() throws Exception {
		// 初始化一个list集合来存放已经封装好的对象
		List<Plane> list = new ArrayList<Plane>();
		// 初始化XML文件路径
		String XmlPath = "xml/fly.xml";
		// 获取Document对象
		Document doc = Dom4jResolutionXml.getDocument(XmlPath);
		// 获得根元素
		Element root = doc.getRootElement();
		// 根据根元素去获取plane元素的集合
		List<Element> planeList = root.elements();
		// 创建一个迭代器
		Iterator<Element> iterator1 = planeList.iterator();
		// 遍历plane元素的集合
		while (iterator1.hasNext()) {
			// 实例化一个Plane对象
			Plane plane = new Plane();
			// 获得一个plane元素
			Element planeElement = iterator1.next();
			// 获得该元素里面的id属性对象
			Attribute planeId = planeElement.attribute("id");
			// 获取id属性的值
			String idValue = planeId.getValue();
			// 封装id值
			plane.setId(Integer.parseInt(idValue));
			// 获得该元素下所有子元素的集合
			List<Element> sonList = planeElement.elements();
			// 获得一个迭代器
			Iterator<Element> iterator2 = sonList.iterator();
			// 遍历所有的子元素集合
			while (iterator2.hasNext()) {
				// 获取一个子元素
				Element sonElement = iterator2.next();
				// 获取该子元素下的内容
				String sonValue = sonElement.getTextTrim();
				// 获得该子元素的名称
				String sonName = sonElement.getName();
				if ("planeNo".equals(sonName)) {
					plane.setPlaneNo(sonValue);
				}
				if ("destination".equals(sonName)) {
					plane.setDestination(sonValue);
				}
				if ("departureDate".equals(sonName)) {
					plane.setDepartureDate(sonValue);
				}
			}
			list.add(plane);
		}		// 打印所有的航班信息
		System.out.println("编号\t航班号\t\t目的地\t\t起飞日期");
		for (int i = 0; i < list.size(); i++) {
			System.out.print(list.get(i).getId() + "\t");
			System.out.print(list.get(i).getPlaneNo() + "\t\t");
			System.out.print(list.get(i).getDestination() + "\t\t");
			System.out.println(list.get(i).getDepartureDate());
		}
	}

	@Override
	public void getPlaneByDepartureDte(String departureDate) throws Exception {
		// 初始化一个list集合来存放已经封装好的对象
		List<Plane> list = new ArrayList<Plane>();
		// 初始化XML文件路径
		String XmlPath = "xml/fly.xml";
		// 获取Document对象
		Document doc = Dom4jResolutionXml.getDocument(XmlPath);
		// 获得根元素
		Element root = doc.getRootElement();
		// 根据根元素去获取plane元素的集合
		List<Element> planeList = root.elements();
		// 创建一个迭代器
		Iterator<Element> iterator1 = planeList.iterator();
		// 遍历plane元素的集合
		while (iterator1.hasNext()) {
			// 获得一个plane元素
			Element planeElement = iterator1.next();
			// 获得该元素下所有子元素的集合
			List<Element> sonList = planeElement.elements();
			// 获得一个迭代器
			Iterator<Element> iterator2 = sonList.iterator();
			// 遍历所有的子元素集合
			while (iterator2.hasNext()) {
				// 获取一个子元素
				Element sonElement = iterator2.next();
				// 获取该子元素下的内容
				String sonValue = sonElement.getTextTrim();
				// 获得该子元素的名称
				String sonName = sonElement.getName();
				if (departureDate.equals(sonValue)) {
					// 实例化一个Plane对象
					Plane plane = new Plane();
					// 如果匹配成功获取该子元素的父元素
					Element parentElement = sonElement.getParent();
					// 获得该元素里面的id属性对象
					Attribute planeId = parentElement.attribute("id");
					// 获取id属性的值
					String idValue = planeId.getValue();
					// 封装id值
					plane.setId(Integer.parseInt(idValue));
					// 重新获得该父元素下面的所有子元素的集合
					List<Element> childList = parentElement.elements();
					// 遍历封装
					for (Element childElement : childList) {
						if ("planeNo".equals(childElement.getName())) {
							plane.setPlaneNo(childElement.getTextTrim());
						}
						if ("destination".equals(childElement.getName())) {
							plane.setDestination(childElement.getTextTrim());
						}
						if ("departureDate".equals(childElement.getName())) {
							plane.setDepartureDate(childElement.getTextTrim());
						}
					}
					list.add(plane);
				}
			}
		}
		// 打印航班信息
		System.out.println("编号\t航班号\t\t目的地\t\t起飞日期");
		for (int i = 0; i < list.size(); i++) {
			System.out.print(list.get(i).getId() + "\t");
			System.out.print(list.get(i).getPlaneNo() + "\t\t");
			System.out.print(list.get(i).getDestination() + "\t\t");
			System.out.println(list.get(i).getDepartureDate());
		}
	}

	@Override
	public void getPlaneByDestination(String destination) throws Exception {
		// 初始化一个list集合来存放已经封装好的对象
		List<Plane> list = new ArrayList<Plane>();
		// 初始化XML文件路径
		String XmlPath = "xml/fly.xml";
		// 获取Document对象
		Document doc = Dom4jResolutionXml.getDocument(XmlPath);
		// 获得根元素
		Element root = doc.getRootElement();
		// 根据根元素去获取plane元素的集合
		List<Element> planeList = root.elements();
		// 创建一个迭代器
		Iterator<Element> iterator1 = planeList.iterator();
		// 遍历plane元素的集合
		while (iterator1.hasNext()) {
			// 获得一个plane元素
			Element planeElement = iterator1.next();
			// 获得该元素下所有子元素的集合
			List<Element> sonList = planeElement.elements();
			// 获得一个迭代器
			Iterator<Element> iterator2 = sonList.iterator();
			// 遍历所有的子元素集合
			while (iterator2.hasNext()) {
				// 获取一个子元素
				Element sonElement = iterator2.next();
				// 获取该子元素下的内容
				String sonValue = sonElement.getTextTrim();
				// 获得该子元素的名称
				String sonName = sonElement.getName();
				if (destination.equals(sonValue)) {
					// 实例化一个Plane对象
					Plane plane = new Plane();
					// 如果匹配成功获取该子元素的父元素
					Element parentElement = sonElement.getParent();
					// 获得该元素里面的id属性对象
					Attribute planeId = parentElement.attribute("id");
					// 获取id属性的值
					String idValue = planeId.getValue();
					// 封装id值
					plane.setId(Integer.parseInt(idValue));
					// 重新获得该父元素下面的所有子元素的集合
					List<Element> childList = parentElement.elements();
					// 遍历封装
					for (Element childElement : childList) {
						if ("planeNo".equals(childElement.getName())) {
							plane.setPlaneNo(childElement.getTextTrim());
						}
						if ("destination".equals(childElement.getName())) {
							plane.setDestination(childElement.getTextTrim());
						}
						if ("departureDate".equals(childElement.getName())) {
							plane.setDepartureDate(childElement.getTextTrim());
						}
					}
					list.add(plane);
				}
			}
		}
		// 打印航班信息
		System.out.println("编号\t航班号\t\t目的地\t\t起飞日期");
		for (int i = 0; i < list.size(); i++) {
			System.out.print(list.get(i).getId() + "\t");
			System.out.print(list.get(i).getPlaneNo() + "\t\t");
			System.out.print(list.get(i).getDestination() + "\t\t");
			System.out.println(list.get(i).getDepartureDate());
		}
	}

	@Override
	public void deletePlane(int num) throws Exception {
		// 初始化XML文件路径
		String XmlPath = "xml/fly.xml";
		// 获取Document对象
		Document doc = Dom4jResolutionXml.getDocument(XmlPath);
		// 获得根元素
		Element root = doc.getRootElement();
		// 根据根元素去获取plane元素的集合
		List<Element> planeList = root.elements();
		// 创建一个迭代器
		Iterator<Element> iterator1 = planeList.iterator();
		// 遍历plane元素的集合
		while (iterator1.hasNext()) {
			Element planeElement = iterator1.next();
			// 获得该元素里面的id属性对象
			Attribute planeId = planeElement.attribute("id");
			// 获取id属性的值
			String idValue = planeId.getValue();
			// 判断编号是否一致
			if ((num + "").equals(idValue)) {
				root.remove(planeElement);
				System.out.println("恭喜您，删除成功！");
			}
		}
		// 刷新删除
		Dom4jWriteXml.writeXml(XmlPath, doc);

	}

	@Override
	public void updatePlane(int num) throws Exception {
		// 初始化XML文件路径
		String XmlPath = "xml/fly.xml";
		// 获取Document对象
		Document doc = Dom4jResolutionXml.getDocument(XmlPath);
		// 获得根元素
		Element root = doc.getRootElement();
		// 根据根元素去获取plane元素的集合
		List<Element> planeList = root.elements();
		// 创建一个迭代器
		Iterator<Element> iterator1 = planeList.iterator();
		// 遍历plane元素的集合
		while (iterator1.hasNext()) {
			Element planeElement = iterator1.next();
			// 获得该元素里面的id属性对象
			Attribute planeId = planeElement.attribute("id");
			// 获取id属性的值
			String idValue = planeId.getValue();
			System.out.println("id = " + idValue);
			int idValue2 = Integer.parseInt(idValue);
			// 判断编号是否一致
			if (num == idValue2) {
				// 获得该元素下所有子元素的集合
				List<Element> sonList = planeElement.elements();
				// 获得一个迭代器
				Iterator<Element> iterator2 = sonList.iterator();
				// 遍历所有的子元素集合
				while (iterator2.hasNext()) {
					// 获取一个子元素
					Element sonElement = iterator2.next();
					// 获得该子元素的名称
					String sonName = sonElement.getName();
					if ("planeNo".equals(sonName)) {
						System.out.println("请输入新的航班号：");
						String planeNo = scan.next();
						sonElement.setText(planeNo);
					}
					if ("destination".equals(sonName)) {
						System.out.println("请输入新的目的地：");
						String destination = scan.next();
						sonElement.setText(destination);
					}
					if ("departureDate".equals(sonName)) {
						System.out.println("请输入新的起飞日期：");
						String departureDate = scan.next();
						sonElement.setText(departureDate);
					}
				}
				System.out.println("恭喜您，更新成功！");
			}
		}
		// 刷新更新
		Dom4jWriteXml.writeXml(XmlPath, doc);
	}
}
